const db = wx.cloud.database()
const _ = db.command
class ProductService {
  constructor() {
    this.productData = require('../data/json_data')
    this.listIndex = 0 // 要获取的页码，0:第一页
    this.pageCount = 8 // 每页要显示的记录数量
  }
  /**
   * 分页查询图书数据
   * 查询条件比较复杂，采用数据库的正则实现关键字的模糊查询 功能
   * 1)根据类型进行查询
   * 2）根据搜索关键词进行查询
   * 3）能够同时根据类别和搜索关键词查询
   * category:用户选择的类别
   * keyword：搜索关键字
   * isReset：是否需要重置初始页码为0
   */
  getProductList(category, keyword, isReset) {
    // 点击横向滑动菜单时，重置当前页面已经请求的页码计数
    if (isReset) {
      this.listIndex = 0
    }
    let query = db.collection('product')
    // 表示同时根据类别和关键字查询
    if (category !== '全部' && category !== '' && keyword !== '') {
      query = query.where({
        secondcategory: db.RegExp({
          regexp: category,
          options: 'i'
        }),
        bookname: db.RegExp({ // php从入门到放弃  
          regexp: '.*' + keyword + '.*', // 字符串中必须包含keyword变量的值，且前后可以跟任意多个字符
          options: 'i'
        })
      })
    } else if (category !== '全部' && category !== '') {
      query = query.where({
        secondcategory: db.RegExp({
          regexp: category,
          options: 'i'
        })
      })
    } else if (keyword !== '') {
      query = query.where({
        bookname: db.RegExp({ // php从入门到放弃  
          regexp: '.*' + keyword + '.*', // 字符串中必须包含keyword变量的值，且前后可以跟任意多个字符
          options: 'i'
        })
      })
    }
    let promise = query.skip(this.listIndex * this.pageCount).limit(this.pageCount).get()
      ++this.listIndex
    return promise
  }
  // 获取热搜词，用于在搜索页面展示热搜的词条
  getHotSearchProducts() {
    return this.productData.hotSearchProducts
  }
  /**
   * 获取输入内容的实时搜索建议
   * 匹配方法：遍历suggestWords数组，比较每个对象的word的值是否包含用户输入的搜索关键词
   * 如果包含，就将这个对象返回
   */
  getSuggestWords(keyword) {
    let arr = this.productData.suggestWords.filter(item => {
      return item.word.toLowerCase().indexOf(keyword) > -1
    })
    // 只返回前8个
    return arr.slice(0, 8)
  }
  // 根据商品的index获取商品的详细信息
  // index 商品id
  getProductByIndex(index) {
    return db.collection('product').where({
      index: index
    }).get()
  }
}
export default ProductService